package com.lcy.algorithm.huawei;

import java.util.Scanner;

/**
 * 题目描述:一个整数可以由连续的自然数之和来表示。给定一个整数 ,计算该整数有几种连续自然数之和的表达式，且打印出每种表达式。
 * 输入描述:一个目标整数T (1 <=T<= 1000)
 * 输出描述:该整数的所有表达式和表达式的个数。如果有多种表达式,输出要求为:
 * 1.自然数个数最少的表达式优先输出
 * 2.每个表达式中按自然数递增的顺序输出,具体的格式参见样例。在每个测试数据结束时,输出一-行” Result:X" , 其中X是最终的表达式个数。
 * 示例
 * 输入: 9
 * 输出: 9=9
 * 9=4+5
 * 9=2+3+4
 * Result:3
 * 说明:整数9有三种表示方法,第1个表达式只有1个自然数,最先输出,第2个表达式有2个自然数,第2次序输出,第3个表达式有3个自然数,最后输出。每个表达式中的
 * 鸟瞰图
 * 自然数都是按递增次序输出的。
 * 数字与符号之间无空格
 */
public class 用连续自然数之和来表示整数 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int target = scanner.nextInt();
        int result = 0;
        //从大到小加，输出则会从少到多
        for (int i = target; i > 0; i--) {
            //记录最大值
            int max = i;
            //记录最小值
            int min = max;
            //记录累加和
            int sum = max;
            while (sum < target) {
                min--;
                sum += min;
            }

            if (sum == target) {
                printExpression(min,max,target);
                result++;
            }
        }
        System.out.println("result=" + result);
    }


    // 打印连续自然数序列的表达式
    private static void printExpression(int min, int max, int target) {
        StringBuilder stringBuilder = new StringBuilder(target + "=");
        for (int j = min; j <= max; j++) {
            stringBuilder.append(j + (j == max ? "" : "+"));
        }
        System.out.println(stringBuilder);
    }
}
